/* 主模块 组织其他模块 */

/* 如果使用的方式一暴露，则必须要按需导入，这里导入的名称要和暴露的名称一致
    export moduleName;
    export version;

*/

import {
    moduleName,
    version,
    PI
} from './m1.js'; // 模块的路径也不可以省略


/* 使用模块m2.js */
/* 如果使用的是模式二暴露的，也要按需导入 */
/*  如果 模块里面导出的成员同名：
会报错：SyntaxError: Identifier 'moduleName' has already been declared
如何解决呢？
import {
    moduleName1,
    version as m2Version
} from './m2.js'

1. 去对应的模块里面把把成员的暴露名称改掉
2. 可以在导入的时候，取一个别名
3. 我们可以整体导出取别名
*/

/* 这种情况下，会把 方式二或者是方式里面的所有的成员作为一个对象导出，然后把该对象赋值给 m2 =  {
    moduleName1,
    version,

    * 代表把 方式1或者方式2暴露的成员 全部作为 m2 的属性存在
} */
import * as m2 from './m2.js';

/* 使用 m3 
m3 = {
    moduleName,
    m3Version: version
}
*/

/* 在导入的时候，除了可以导入默认的成员对象，还可以按需导入 export关键字暴露的成员 */
import m3, {
    /* 由于已经取了别名，原先的名字是没有意义了 */
    fn as m3Fn,
    age
} from './m3.js'


console.log('使用 m1 模块里面的成员：', moduleName, version);
console.log('使用 m2 模块里面的成员：', m2.moduleName1, m2.version);
console.log('使用 m3 模块里面的成员：', m3.moduleName, m3.m3Version);
/* fn is not defined 报错 fn 没有意义了 
console.log('使用 m3 模块里面的成员：', m3Fn(), fn());
*/
console.log('使用 m3 模块里面的成员：', age, m3Fn());